<?php
class CaracterId {
	private $grupo_ascii_1 = array();
    private $grupo_ascii_2 = array();
    private $grupo_ascii_3 = array();
    
	private $caracteres_base = array();
    private $id_base = array();
    
    private $mix = array();
    private $mix_random = array();
	
	public function __construct(){
        array_push($this -> grupo_ascii_1, 48, 57);
        array_push($this -> grupo_ascii_2, 65, 90);
        array_push($this -> grupo_ascii_3, 97, 122);
	}

	public function generarCaracteresAscii(){
        $i = $this -> grupo_ascii_1[0];
		for($i; $i <= $this -> grupo_ascii_1[1]; $i++)
		{
            $this -> caracteres_base[] = chr($i);         
            do {
            srand( CaracterId::crear_semilla() );
            $rand = rand();
            }
            while(array_key_exists($rand, $this -> id_base));
            $this -> id_base[] = $rand;
		}
        
        $j = $this -> grupo_ascii_2[0];
		for($j; $j <= $this -> grupo_ascii_2[1]; $j++)
		{
            $this -> caracteres_base[] = chr($j);
            do {
            srand( CaracterId::crear_semilla() );
            $rand = rand();
            }
            while(array_key_exists($rand, $this -> id_base));
            $this -> id_base[] = $rand;
		}
        
        $k = $this -> grupo_ascii_3[0];
		for($k; $k <= $this -> grupo_ascii_3[1]; $k++)
		{
            $this -> caracteres_base[] = chr($k);
            do {
            srand( CaracterId::crear_semilla() );
            $rand = rand();
            }
            while(array_key_exists($rand, $this -> id_base));
            $this -> id_base[] = $rand;
		}
        
        $this -> mix = array_combine($this -> id_base, $this -> caracteres_base);
        //ksort($this -> mix);
        return $this -> mix;
	}
    
    public static function crear_semilla()
    {
      list($usec, $sec) = explode(' ', microtime());
      return (float) $sec + ((float) $usec * 100000);
    }
}
?>